package com.knowledge.common.utils;

import com.knowledge.common.AliyunOssUploadUtils;
import com.knowledge.common.utils.http.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class OssChangeUtil {


    // 正则表达式：匹配 Markdown 图片格式 ![描述文本](图片URL)
    private static final Pattern MARKDOWN_IMAGE_PATTERN = Pattern.compile("!\\[(.*?)\\]\\((.*?)\\)");
    private static final Logger log = LoggerFactory.getLogger(OssChangeUtil.class);
    // 开关：true=提取为纯URL，false=保留Markdown格式（替换为自有OSS链接）
    private static final boolean EXTRACT_PURE_URL = true;

    public static String getNewDocumentContent(String documentContent, String typeId, String documentId) {
        StringBuffer newDocumentContent = new StringBuffer();
        Matcher matcher = MARKDOWN_IMAGE_PATTERN.matcher(documentContent);
        while (matcher.find()) {
            String altText = matcher.group(1); // 图片描述文本（可忽略）
            String originalImageUrl = matcher.group(2); // 原始图片URL
            String finalImageUrl = originalImageUrl; // 最终使用的图片URL

            try {
                // 1. 下载原始图片（无论是否提取纯URL，都先上传到自有OSS，保证链接稳定性）
                byte[] imageBytes = HttpUtils.downloadImage(originalImageUrl);
                // 2. 上传到自有OSS：对象键格式 {知识库ID}/{文档ID}/{图片名}
                String objectKeyPrefix = typeId + "/" + documentId + "/";
                String ossImageUrl = AliyunOssUploadUtils.uploadImageToOss(imageBytes, objectKeyPrefix);
                finalImageUrl = ossImageUrl; // 替换为自有OSS链接
                log.info("图片上传OSS成功：原始URL={}, 新URL={}");
            } catch (Exception e) {
                log.error("处理图片链接失败：originalUrl={}, 异常信息={}");
                // 处理失败时，保留原始URL（避免文档丢失内容）
            }
            // 3. 根据开关决定替换格式：纯URL 或 保留Markdown格式
            String replacement;
            if (EXTRACT_PURE_URL) {
                // 需求：直接提取为纯URL字符串（去掉 ![描述](...) 外层格式）
                replacement = finalImageUrl;
            } else {
                // 兼容模式：保留Markdown图片格式，仅替换URL为自有OSS链接
                replacement = "![" + altText + "](" + finalImageUrl + ")";
            }

            // 安全替换（避免URL中的特殊字符导致正则异常）
            matcher.appendReplacement(newDocumentContent, Matcher.quoteReplacement(replacement));
        }
        // 追加剩余未匹配的内容
        matcher.appendTail(newDocumentContent);
        return newDocumentContent.toString();
    }

}
